<?php
namespace app\index\route;

use think\facade\Route;

//系统内置的中间件：
//think\middleware\AllowCrossDomain	跨域请求支持
//think\middleware\CheckRequestCache	请求缓存
//think\middleware\LoadLangPack	多语言加载
//think\middleware\SessionInit	Session初始化
//think\middleware\FormTokenCheck	表单令牌

//测试请求路由
Route::get('request', 'index/request');

//测试响应路由
Route::get('response', 'index/response');

//通过 /index(应用)/mid(路由名称) 进行访问
Route::get('mid', 'index/mid')
    ->middleware(\app\middleware\Test::class)
    ->allowCrossDomain(); //支持跨域
//  ->allowCrossDomain([
//        'Access-Control-Allow-Origin'        => 'thinkphp.cn',
//        'Access-Control-Allow-Credentials'   => 'true',
//        'Access-Control-Max-Age'             => 600, //预检缓存有效期
//    ]);

//——————————路由使用案例——————————

//##########路由组+中间件
//Route::group(function () {
//    Route::rule('blog/:id', 'blog/read');
//    Route::rule('blog/:name', 'blog/read');
//})->ext('html')->pattern(['id' => '\d+', 'name' => '\w+']);

//Route::group('blog', function () {
//    Route::get(':id', 'blog/read');
//    Route::post(':id', 'blog/update');
//    Route::delete(':id', 'blog/delete');
//})->ext('html')->pattern(['id' => '\d+']);
//还可以简化为
//Route::group('blog', function () {
//    Route::get(':id', 'read');
//    Route::post(':id', 'update');
//    Route::delete(':id', 'delete');
//})->prefix('blog/')->ext('html')->pattern(['id' => '\d+']);

//Route::get('new/<id>','News/read'); // 定义GET请求路由规则
//Route::post('new/<id>','News/update'); // 定义POST请求路由规则
//Route::put('new/:id','News/update'); // 定义PUT请求路由规则
//Route::delete('new/:id','News/delete'); // 定义DELETE请求路由规则
//Route::any('new/:id','News/read'); // 所有请求都支持的路由规则

//##########资源路由
//Route::resource('blog', 'Blog');
//标识	    请求类型	生成路由规则	    对应操作方法（默认）  场景
//index	    GET	    blog	        index              首页/列表界面
//create	GET	    blog/create	    create             新增界面
//save	    POST	blog	        save               新增操作
//read	    GET	    blog/:id	    read               详情界面
//edit	    GET	    blog/:id/edit	edit               修改界面
//update	PUT	    blog/:id	    update             修改操作
//delete	DELETE	blog/:id	    delete             删除操作
// 只允许index read edit update 四个操作
//Route::resource('blog', 'Blog')
//    ->only(['index', 'read', 'edit', 'update']);
// 排除index和delete操作
//Route::resource('blog', 'Blog')
//    ->except(['index', 'delete']);
// 还可以更改对应的操作方法
//              修改前    类型    修改后 对应方法
//Route::rest('create',['GET', '/add','add']);
//Route::rest([
//    'save'   => ['POST', '', 'store'],
//    'update' => ['PUT', '/:id', 'save'],
//    'delete' => ['DELETE', '/:id', 'destory'],
//]);
// 修改默认id参数名
//Route::resource('blog', 'Blog')
//    ->vars(['blog' => 'blog_id']);
// 多级的资源路由
//Route::resource('blog', 'Blog');
//Route::resource('blog.comment','Comment')->vars(['blog' => 'blogId']); //默认是blog_id
//就可以访问如下地址
//http://serverName/blog/128/comment/32
//http://serverName/blog/128/comment/32/edit
//生成的路由规则分别是：
//blog/:blogId/comment/:id
//blog/:blogId/comment/:id/edit
// 控制器获取 public function edit($id, $blogId)

// ##########完全匹配 即/new/info/2等后面带参数的url将无法访问
//Route::get('new/:cate$', 'News/category');

// 配置中开启全局路由完全匹配 'route_complete_match'   => true, 可以针对单个路由允许参数匹配
//Route::get('new/:cate', 'News/category')->completeMatch(false);

// ##########路由传参
//Route::get('blog/:id','blog/read')->append(['status' => 1, 'app_id' =>5]);

// ##########命名路由 生成url连接
// 用url('new_read', ['id' => 10]);
// 或url('News/read', ['id' => 10]);
//Route::rule('new/:id','News/read')->name('new_read');

// ##########强制开启路由
// 配置 'url_route_must'		=>  true, 将类似Laravel必须通过路由访问

// ##########路由参数
//参数	            说明	                            方法名
//ext	            URL后缀检测，支持匹配多个后缀	    ext
//deny_ext	        URL禁止后缀检测，支持匹配多个后缀	    denyExt
//https	            检测是否https请求	                https
//domain	        域名检测	                        domain
//complete_match	是否完整匹配路由	                completeMatch
//model	            绑定模型	                        model
//cache	            请求缓存	                        cache
//ajax	            Ajax检测                  	    ajax
//pjax	            Pjax检测	                        pjax
//json	            JSON检测	                        json
//validate	        绑定验证器类进行数据验证	        validate
//append	        追加额外的参数                 	append
//middleware	    注册路由中间件	                    middleware
//filter	        请求变量过滤	                    filter
//Route::get('new/:id', 'News/read')
//    ->ext('shtml|html')
//    ->https();
//Route::get('new/:id', 'News/read')
//    ->option([
//        'ext'   => 'html',
//        'https' => true
//    ]);
// 定义GET请求路由规则 并设置禁止URL后缀为png、jpg和gif的访问
//Route::get('new/:id', 'News/read')
//    ->denyExt('jpg|png|gif');
// 完整域名检测 只在news.thinkphp.cn访问时路由有效
//Route::get('new/:id', 'News/read')
//    ->domain('news.thinkphp.cn');
// 子域名检测
//Route::get('new/:id', 'News/read')
//    ->domain('news');
// 检查type变量
//Route::post('new/:id', 'News/save')
//    ->filter('type', 1);
// 检查多个请求变量
//Route::post('new/:id', 'News/save')
//    ->filter([ 'type' => 1,'status'=> 1 ]);

// ##########开启路由延迟解析 配置
//'url_lazy_route'         => true,
//开启延迟路由解析后，如果你需要生成路由反解URL，需要使用命令行指令
//php think optimize:route

// ########## 路由数据验证
//对请求数据使用验证器类app\validate\User进行自动验证，并且使用edit验证场景：
//Route::post('hello/:id', 'index/hello')
//	->validate(\app\validate\Test::class,'edit');

//或者不使用验证器而直接传入验证规则
//Route::post('hello/:id', 'index/hello')
//    ->validate([
//        'name'	=>	'min:5|max:50',
//        'email'	=>	'email',
//    ]);